package org.domain.sisbreve.session;

import java.util.List;

import org.domain.sisbreve.entity.Aeronave;
import org.domain.sisbreve.entity.enums.StatusAeronave;
import org.domain.sisbreve.persistence.AeronaveDAO;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;

/**
 * @author hugoalexandre
 * 
 */
@Scope(ScopeType.CONVERSATION)
@Name(value = "manterAeronaveAction")
public class ManterAeronaveAction extends BaseBean {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private static final String LISTAR = "listarAeronave";
	private static final String MANTER = "manterAeronave";

	private Integer quantidadePorPagina = 5;

	@In(create = true, required = false)
	@Out(required = false)
	private Aeronave aeronave;

	@In
	private AeronaveDAO aeronaveDAO;

	/**
	 * @return
	 */
	public String avancar() {
		if (aeronave.getId() == null) {
			addMsgBundle("Aeronave incluída com sucesso.");
		} else {
			addMsgBundle("Aeronave alterada com sucesso.");
		}
		aeronaveDAO.saveOrUpdate(aeronave);
		aeronave = new Aeronave();
		return LISTAR;
	}

	/**
	 * @return
	 */
	public String cancel() {
		aeronave = new Aeronave();
		return LISTAR;
	}

	/**
	 * @param aeronave
	 * @return
	 */
	public String selecionarAeronave(Aeronave aeronave) {
		this.aeronave = aeronave;
		return MANTER;
	}

	/**
	 * @param aeronave
	 * @return
	 */
	public String excluirAeronave(Aeronave aeronave) {
		aeronaveDAO.remove(aeronave);
		addMsgBundle("Aeronave excluída com sucesso.");
		return LISTAR;
	}

	/**
	 * @return the aeronave
	 */
	public Aeronave getAeronave() {
		return aeronave;
	}

	/**
	 * @param aeronave
	 *            the aeronave to set
	 */
	public void setAeronave(Aeronave aeronave) {
		this.aeronave = aeronave;
	}

	/**
	 * @return
	 */
	@Factory(scope = ScopeType.CONVERSATION, value = "factoryStatusAeronave")
	public StatusAeronave[] factoryStatusEnum() {
		return StatusAeronave.values();
	}

	/**
	 * @return
	 */
	@Factory(scope = ScopeType.EVENT, value = "colecaoAeronave")
	public List<Aeronave> colecaoAeronave() {
		return aeronaveDAO.retriveAll();
	}

	/**
	 * @return the quantidadePorPagina
	 */
	public Integer getQuantidadePorPagina() {
		return quantidadePorPagina;
	}

	/**
	 * @param quantidadePorPagina
	 *            the quantidadePorPagina to set
	 */
	public void setQuantidadePorPagina(Integer quantidadePorPagina) {
		this.quantidadePorPagina = quantidadePorPagina;
	}
}
